package hyl.base.flow.chart;

/**
 * 
 * 
 * <p>
 * className: INode
 * </p>
 * <p>
 * Description: 子节点 (下节点,后置节点,前方节点) <br>
 * 父节点(上节点,前置节点,后方节点)
 * </p>
 * 
 * @author: 37798
 * @date: 2021年6月1日 上午9:48:28
 * @copyright: 2018 da you zou Inc. All rights reserved.
 */
public interface INode extends IAttribute {
	/**
	 * 设置节点编号为uuid
	 * 
	 */
	void setId();

	/**
	 * 设置节点编号为指定id
	 * 
	 * @param id
	 */
	void setId(String id);

	/**
	 * 获取节点编号
	 * 
	 * @return
	 */
	String getId();

	/**
	 * 获取父节点, 如果没有返回空
	 * 
	 * @return
	 */
	INode getParent();

	/**
	 * 获取父节点集合, 如果没有返回空
	 * 
	 * @return
	 */
	INode[] getParents();

	/**
	 * 获取子节点 如果没有返回空
	 * 
	 * @return
	 */
	INode getChild();

	/**
	 * 获取子节点集合 如果没有返回空
	 * 
	 * @return
	 */
	INode[] getChilds();

	/**
	 * 添加父节点,不触发 父节点的 添加子节点事件
	 * 
	 * @param 前置节点,父节点
	 */
	void setParent(INode 前置节点);

	/**
	 * 添加子节点,不触发 子节点的 添加父节点事件
	 * 
	 * @param 后置节点
	 */
	void setChild(INode 后置节点);

	/**
	 * 添加子节点 触发 父节点的 添加子节点事件
	 * 
	 * @param 前置节点
	 * @return
	 */
	boolean connParent(INode 前置节点);

	/**
	 * 添加子节点,触发 子节点的 添加父节点事件
	 * 
	 * @param 后续节点
	 * @return
	 */
	boolean connChild(INode 后续节点);

	/**
	 * 设置添加触发事件
	 * 
	 * @param 绑定事件
	 */
	void onAdd(IMount 绑定事件);

	/**
	 * 移除父节点
	 * 
	 * @param 前置节点
	 */
	void removeParent(INode 前置节点);

	/**
	 * 移除子节点
	 * 
	 * @param 后续节点
	 */
	void removeChild(INode 后续节点);

	/**
	 * 判断是否有父节点
	 * 
	 * @return
	 */
	boolean hasParent();

	/**
	 * 判断是否有子节点
	 * 
	 * @return
	 */
	boolean hasChild();

	/**
	 * 设置 工作
	 * 
	 * @param work
	 */
	void set工人(IWorker 工人);

	IWorker get工人();

	void del工人();

}
